package com.bsoft.utils;

import cn.hutool.http.webservice.SoapClient;
import org.apache.commons.lang.StringEscapeUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


import javax.xml.namespace.QName;
import java.util.HashMap;
import java.util.Map;

public class WebServiceClientUtil {
    private static Logger logger = LoggerFactory.getLogger(WebServiceClientUtil.class);


    /**
     * 调用平台,标准版
     */
    public static void pusPlatform_Standard(String service, Map<String,Object> MsgBody, String MsgType,String ptUrl) throws Exception {
        try {
            String parameter="";
            Map<String, Object> BSXml = new HashMap<>();
            Map<String, Object> MsgHeader = new HashMap<>();
            Map<String, Object> LogInfo = new HashMap<>();
            MsgHeader.put("Sender", "HIS");
            MsgHeader.put("MsgType", MsgType);
            MsgHeader.put("MsgVersion", "3.2");
            MsgHeader.put("ServiceType", "Service");
            MsgHeader.put("Organization","45075129-0");
            BSXml.put("MsgHeader", MsgHeader);
            BSXml.put("MsgBody", MsgBody);
            parameter = XmlMapUtils.formatXml(XmlMapUtils.map2xml(BSXml, "BSXml"));
            SoapClient client = SoapClient.create(ptUrl)
                    // 设置要请求的方法，此接口方法前缀为web，传入对应的命名空间
                    .setMethod("ws:invoke", "http://ws.access.hai/")
                    // 设置参数，此处自动添加方法的前缀：web
                    .setParam("service", service, false)
                    .setParam("urid", "", false)
                    .setParam("pwd", "", false)
                    .setParam("parameter", parameter, false)
                    .setConnectionTimeout(10000)
                    .setReadTimeout(10000);
            // 发送请求，参数true表示返回一个格式化后的XML内容
            // 返回内容为XML字符串，可以配合XmlUtil解析这个响应

            logger.info("调用平台入参:"+parameter);
            String response = client.send(true);
            response= StringEscapeUtils.unescapeXml( response);
            logger.info("调用平台出参:"+response);
        }catch (Exception e){
            logger.error("调用平台的时候异常:",e);
        }
    }


    /**
     * 调用平台,自定义
     */
    public static String pusPlatform_Customize(String service,String parameter,String ptUrl) throws Exception {
        String response = "";
        try {
            SoapClient client = SoapClient.create(ptUrl)
                    // 设置要请求的方法，此接口方法前缀为web，传入对应的命名空间
                    .setMethod("ws:invoke", "http://ws.access.hai/")
                    // 设置参数，此处自动添加方法的前缀：web
                    .setParam("service", service, false)
                    .setParam("urid", "", false)
                    .setParam("pwd", "", false)
                    .setParam("parameter", parameter, false)
                    .setConnectionTimeout(4000)
                    .setReadTimeout(4000);
            // 发送请求，参数true表示返回一个格式化后的XML内容
            // 返回内容为XML字符串，可以配合XmlUtil解析这个响应
            response = client.send(true);
            response= StringEscapeUtils.unescapeXml( response);
            return response;
        }catch (Exception e){
            logger.error("调用平台的时候异常:",e);
        }
        return response;
    }

    /**
     * 调用临床路径平台
     */
    public static String getClinicalPathwaysPt(String url,String xmlParm){

        String response = "";
        try {
            SoapClient client = cn.hutool.http.webservice.SoapClient.create(url)
                    .header("SOAPAction","http://webservice.detcp.liedun.net")
                    // 设置要请求的方法，此接口方法前缀为web，传入对应的命名空间
                    .setMethod("web:interfaceforhis", "http://webservice.detcp.liedun.net")
                    // 设置参数，此处自动添加方法的前缀：web
                    .setParam("inputxml", xmlParm,true)
                    .setConnectionTimeout(10000)
                    .setReadTimeout(10000);
            // 发送请求，参数true表示返回一个格式化后的XML内容
            // 返回内容为XML字符串，可以配合XmlUtil解析这个响应
            response = client.send(true);
            response= StringEscapeUtils.unescapeXml(response);
            logger.error("临床路径格式化返回:"+response.toString());
            String[] arr = response.split("<Result>");
            String s = arr[1];
            String[] arr1 = s.split("</Result>");
            response = "<Result>"+ arr1[0]+"</Result>";
            return response;
        }catch (Exception e){
            logger.error("调用临床路径平台:"+e);
        }
        return response;
    }

    public static Map<String, Object> returnWebServiceStr(String res) throws Exception {
        String[] resArr = res.split("<return>");
        res = resArr[1];
        resArr = res.split("</return>");
        res = resArr[0];
        logger.error("发药机:药品信息推送推送出参:" + res);
        Map<String, Object> resMap = JSONUtil.toHashMap(res);
        return resMap;
    }

}
